package bean;

import entidade.TipoUsuario;
import entidade.Usuario;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import util.JpaUtil;
import util.Jsfutil;

@ManagedBean
@RequestScoped
public class ClienteBean {

    private Usuario usuario = new Usuario();
    private TipoUsuario tipoUsuario = new TipoUsuario();
    private List<Usuario> usuarios = new ArrayList<Usuario>();

    public ClienteBean() {

        listCliente();
    }

    public void salvar() {

        EntityManager em = null;
        EntityTransaction trans = null;
        try {
            em = JpaUtil.getEntityManager();
            trans = em.getTransaction();
            trans.begin();
            em.merge(usuario);
            trans.commit();
            Jsfutil.addMsg("Ok! ", "Cliente salvo com Sucesso ! ", FacesMessage.SEVERITY_INFO);

        } catch (Exception e) {
            Jsfutil.addMsg("Erro ao inserir Cliente", e.getMessage(), FacesMessage.SEVERITY_ERROR);
            if (trans != null && trans.isActive()) {
                trans.rollback();
            }
        } finally {

            JpaUtil.closeEntityManager(em);
        }
    }

    public void apagar() {

        EntityManager em = null;
        EntityTransaction trans = null;
        try {
            em = JpaUtil.getEntityManager();
            trans = em.getTransaction();
            trans.begin();
            Usuario buscaUsuario = em.find(Usuario.class, usuario.getIdUsuario());
            em.remove(buscaUsuario);
            trans.commit();
            Jsfutil.addMsg("Ok!", "Cliente deletado com sucesso ! ", FacesMessage.SEVERITY_INFO);
            listCliente();

        } catch (Exception ex) {
            Jsfutil.addMsg("Erro ao tentar deletar o Cliente. ", ex.getMessage(), FacesMessage.SEVERITY_ERROR);
            if (trans != null && trans.isActive()) {
                trans.rollback();
            }

        } finally {
            JpaUtil.closeEntityManager(em);
        }
    }

    private void listCliente() {

        EntityManager em = JpaUtil.getEntityManager();
        usuarios = em.createNamedQuery("select * from usuario u where u.id_tipo_usuario = 1").getResultList();
        JpaUtil.closeEntityManager(em);
    }

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public TipoUsuario getTipoUsuario() {
        return tipoUsuario;
    }

    public void setTipoUsuario(TipoUsuario tipoUsuario) {
        this.tipoUsuario = tipoUsuario;
    }

    public List<Usuario> getCliente() {
        return usuarios;
    }

    public void setCliente(List<Usuario> usuarios) {
        this.usuarios = usuarios;
    }
}
